﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using GeekShop.Properties;
using GeekShop.Commands;

namespace GeekShop.Tools
{
    public interface ITool
    {
        #region Properties
        
        /// <summary>
        /// The Cursor will be shown when hovering over the Menu item / the Icon.
        /// </summary>
        Cursor Cursor { get; }
        
        /// <summary>
        /// An Icon which will be shown in the menu.
        /// </summary>
        Bitmap Icon { get; }
        
        /// <summary>
        /// The tools name. It will be displayed in (text) menus as well as in tooltips.
        /// </summary>
        string Name { get; }

        /// <summary>
        /// The Command will be null until ToolReady is invoked.
        /// </summary>
        ICommand Command { get; }
        #endregion

        #region Methods

        /// <summary>
        /// Performs prerequirements, commonly in form of a dialog.
        /// In certain cases, this step could be skipped if no information has to be gathered.
        /// </summary>
        /// <param name="Target">
        /// The Target can be anything: a Picture, Layer, Color and theoretically even GUI elements.
        /// </param>
        /// <returns>
        /// The return value must always be an executable Command.
        /// </returns>
        void RunDialog(PictureManager pictureManager);
        #endregion

        #region Events
        event EventHandler ToolReady;
        #endregion
    }
}
